
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import java.util.LinkedList;

public class Terminador extends IdentificadorSemTexto implements RetanguloListener, IElementosChegada {

	/**
	 * @uml.property  name="ligacaoEntrada"
	 * @uml.associationEnd  inverse="terminador:Ligacao"
	 */
	private LigacaoIdentificadorDestino ligacao;

	/**
	 * @uml.property name="retaguloAr"
	 */
	private RoundRectangle2D retanguloAr;

	private String identificacao;

	/**
	 */
	public Terminador(String identificacao, Retangulo retanguloEnvolvente) {
		super(identificacao,retanguloEnvolvente);
		retanguloEnvolvente.setRetanguloListener(this);
		this.identificacao = identificacao;
		this.retanguloAr = new RoundRectangle2D.Double();
		construirTerminador();
	}
	/**
		 */
		public void construirTerminador(){
			int x = retanguloEnvolvente.getPontoSuperiorEsquerdo().getX();
			int y = retanguloEnvolvente.getPontoSuperiorEsquerdo().getY();
			int largura = retanguloEnvolvente.getTamanho().getLargura();
			int altura = retanguloEnvolvente.getTamanho().getAltura();
			int larguraArc = retanguloEnvolvente.getTamanho().getArcLargura();
			int alturaArc = retanguloEnvolvente.getTamanho().getArcAltura();
			this.retanguloAr.setRoundRect(x, y, altura, largura, alturaArc, larguraArc);
		}

		@Override
		public void retanguloAlterado() {
			construirTerminador();
		}

		@Override
		public void desenhar(Graphics graphics) {
			Graphics2D g2 = (Graphics2D) graphics.create();

			g2.draw(retanguloAr);

			g2.setColor(Color.BLACK);
			g2.drawString(identificacao, retanguloEnvolvente
					.getPontoSuperiorEsquerdo().getX() + 10,
					retanguloEnvolvente.getPontoSuperiorEsquerdo().getY() + 15);
			g2.dispose();
		}

		@Override
		public boolean isSob(Coordenada coordenada) {
			return this.retanguloEnvolvente.contem(coordenada);
		}

		@Override
		public LigacaoIdentificadorDestino associar(
				Identificador identificadorDestino) {
			ligacao = new LigacaoIdentificadorDestino(this, identificadorDestino);
			return ligacao;
		}
		
		@Override
		public boolean podeAssociar(Identificador identificador) {
			if (ligacao== null&& identificador!=this)
				return true;
			return false;
		}
		

}
